package org.example.codeservce.service;

import org.example.codeservce.entity.Order;
import org.example.codeservce.pojo.vo.PromptBigVo;

import java.io.File;
import java.util.Map;

/**
 * @author: Li Qing
 * @date: 2024/5/10 11:52
 * @description:
 */
public interface CodeAnalysis
{
    public PromptBigVo analysisCodeStructure(String unzipFile, Order order);

    /**
     * 找到java包 和 资源文件路径
     *
     * @param folder      路径
     * @param javaFolders 路径值
     */
    default void analysisPackage(File folder, Map<String, File> javaFolders)
    {
        // 检查文件夹是否存在
        if (folder.exists() && folder.isDirectory())
        {
            // 获取文件夹下的所有子文件和子文件夹
            File[] files = folder.listFiles();
            // 遍历文件夹下的所有文件和文件夹
            assert files != null;
            for (File file : files)
            {
                if (file.isDirectory())
                {
                    // 如果是文件夹，继续递归遍历
                    analysisPackage(file, javaFolders);
                }
                //不包含 测试
                if (("java".equals(file.getName()) && !file.getAbsolutePath().contains("test")) ||
                        "resources".equals(file.getName()) ||
                        "pom.xml".equals(file.getName()) ||
                        "application".contentEquals(file.getName()))
                {
                    // 找到名称为 "Java" 的文件夹，将其路径添加到列表中
                    javaFolders.put(file.getName(), file);
                }
            }
        }

    }

    /**
     * 找到全部的包
     *
     * @param folder      路径
     * @param javaFolders 路径值
     */
    default void analysisFindPackage(File folder, Map<String, File> javaFolders)
    {
        // 检查文件夹是否存在
        if (folder.exists() && folder.isDirectory())
        {
            // 获取文件夹下的所有子文件和子文件夹
            File[] files = folder.listFiles();
            // 遍历文件夹下的所有文件和文件夹
            assert files != null;
            if (files.length < 3)
            {
                for (File file : files)
                {
                    if (file.isDirectory())
                    {
                        // 如果是文件夹，继续递归遍历
                        analysisFindPackage(file, javaFolders);
                    }
                }
            }
            else
            {
                for (File file : files)
                {
                    if (file.isDirectory())
                    {
                        javaFolders.put(file.getName(), file);
                    }
                }
            }
        }

    }

    //解析包的 prompt
    String pagePrompt = ",帮我解释一下这个包在spring boot中里面应该放置了什么？只需要解释最后一个包里面的，不需要额外解释其他的。";

    String resourcesPrompt = ",帮我解释一下这个文件里面内容是什么具体有什么作用。";

    String classCodePrompt = ",帮我讲解一下这个java文件里面代码。";

    String pomPrompt = ",帮我分析一下这个pom文件里面的坐标都有什么框架以及技术的优缺点。";

}
